package com.oversea.service;

import java.util.List;
import com.oversea.util.searchcontext.SearchCondition;
import com.oversea.util.searchcontext.SearchContext;
import com.oversea.util.searchcontext.SearchOption;

public interface CommonService<T> {
	/**
	 * 保存对象
	 * 
	 * @param obj
	 * @return
	 */
	T save(T t) ;

	/**
	 * 删除对象
	 * 
	 * @param obj
	 */
     void delete(T t) ;

	/**
	 * 根据id删除对象
	 * 
	 * @param objId
	 */
     void deleteById(int objId) ;

	/**
	 * 修改对象
	 * 
	 * @param obj
	 */
     void update(T t) ;

	/**
	 * 根据id获取对象
	 * 
	 * @param clazz
	 * @param objId
	 * @return
	 */
	 T getObjById(int objId) ;
	 
	/**
	 * 得到所有未删除的对象列表
	 * @param searchContext
	 * @return
	 */
	List<T> getObjectTotalList(SearchContext searchContext) ;
	 
	/**
	 * 根据SearchContenxt获取符合条件的对象总数
	 * @param searchContext
	 * @return
	 */
	Long getObjectCount(SearchContext searchContext);

	/**
	 * 根据SearchContext获取分页的对象list
	 * @param searchContext
	 * @param pageSize
	 * @param pageNumber
	 * @return
	 */
	List<T> getObjectList(SearchContext searchContext, int pageSize,
			int pageNumber) ;

	/**
	 * 有SearchContext build search的hql
	 * @param searchContext
	 * @param args
	 * @return
	 */
    void getWhereHql(SearchContext searchContext, List<Object> args,
			StringBuffer where);

	String getAndOrBySearchConditon(
			SearchCondition.Condition condition) ;

	/**
	 * 根据searchOption得到HQL
	 * @param args
	 * @param where
	 * @param searchOption
	 */
    void getHqlBySearchOption(List<Object> args, StringBuffer where,
			SearchOption searchOption) ;

}
